#ifndef __UNIT__
#define __UNIT__
// 公共类 - 工具类

#include <string>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

namespace oj_unit
{
    const std::string Startpath = "./tmp/";  // 位于/OnlineJudge/compile_server/tmp

    class PathUtil
    {
    public:
        static std::string AddSuffix(const std::string& file_name, const std::string &suffix)
        {
            std::string path = Startpath;
            path += file_name;
            path += suffix;
            return path;
        }

        // 构建完整源文件路径+后缀
        static std::string Src(const std::string& file_name)
        {
            return AddSuffix(file_name, ".cpp");
        }

        // 构建完整可执行文件路径
        static std::string Exe(const std::string& file_name)
        {
            return AddSuffix(file_name, ".exe");
        }

        // 构建存储错误文件的路径
        static std::string Stderr(const std::string& file_name)
        {
            return AddSuffix(file_name, ".stderr");
        }
    };

    class FileUnit
    {
    public:
        // 判断此文件是否存在中
        static bool IsFileExist(std::string path)
        {
            struct stat st;
            int flag = stat(path.c_str(), &st);  // 获取此文件属性
            if (flag == 0)  return true;// 获取成功返回0，表示存在此文件
            return false;  // 获取失败，表示不存在此文件
        }
    };
}

#endif